#ifndef UniformAxisAlignedLoader_hpp
#define UniformAxisAlignedLoader_hpp

#include "loaders/AxisAlignedLoader.hpp"
#include "particles/IParticlePopulation.hpp"
#include "domains/IDomain.hpp"
#include "distributions/IDistribution.hpp"
#include "distributions/IAxisAlignedDistribution.hpp"

class UniformAxisAlignedLoader : public AxisAlignedLoader {	// abstract class that takes care of calculating bounds when a new domain is passed in via setDomain()
	public:
		UniformAxisAlignedLoader(IAxisAlignedDistribution *_sdist, IAxisAlignedDistribution *_vdist, double _density, double _np2c);
		~UniformAxisAlignedLoader();
		//
		virtual void load(IParticlePopulation *pop);
		void setDomain(IAxisAlignedDomain *_dom);	// override AxisAlignedLoader::setDomain()
	protected:
		double density,np2c;
};

#endif
